package com.network.utils.demo.http;

import com.network.retrofit.utils.NetWorkBaseUtil;
import com.network.retrofit.utils.NetWorkLogUtil;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

/**
 * 项目: com.network.utils
 * 创建人: LuoFG
 * 创建时间: 2021/6/29  11:28
 * 描述:
 */
public class ResultDataUtil {


    /**
     * 转换实际类型 处理业务
     * @param data
     * @param type
     * @param resultData
     * @param <T>
     */
    public static <T>void getBaseResponseBean(Object data, Type type, IResultData<T> resultData) {
        BaseResponseBean baseResponseBean = (BaseResponseBean) data;
        if (baseResponseBean == null) {
            return;
        }

        if (baseResponseBean.isSuccess() && baseResponseBean.getCode()==1000) {
            try {
                String str = baseResponseBean.getData();
                NetWorkLogUtil.logE("Data内容：" + str);

                T result;
                if (type == String.class||type==Integer.class) {
                    NetWorkLogUtil.logE("String");
                    result = (T) str;
                    resultData.success(result, baseResponseBean.getMessage());
                    return;
                }
                showType(type);
                result = NetWorkBaseUtil.getInstance().getGson().fromJson(str, type);
                resultData.success(result, baseResponseBean.getMessage());
                return;
            } catch (Exception e) {
                e.printStackTrace();
                NetWorkLogUtil.logE("failure  isSuccess=true  但返回值解析出现问题");
                resultData.failure(baseResponseBean.getCode(), baseResponseBean.getMessage());
            }
        } else {
            NetWorkLogUtil.logE("请求获取结果 数据失败 isSuccess=false " + baseResponseBean.getCode());
            resultData.failure(baseResponseBean.getCode(), baseResponseBean.getMessage());
        }
    }


    /**
     * 返回的json是什么类型
     * @param type
     */
    public static void showType(Type type) {

        if (type == String.class) {
            NetWorkLogUtil.logE("String");
        } else if (type == List.class) {
            //list没有指定泛型类型的
            NetWorkLogUtil.logE("list没有指定泛型类型的");
        } else if (type == Map.class) {
            //map没有指定泛型类型的
            NetWorkLogUtil.logE("map没有指定泛型类型的");
        } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getActualTypeArguments().length == 1) {
            //List指定泛型类型的
            NetWorkLogUtil.logE("List指定泛型类型的");
        } else if (type instanceof ParameterizedType && ((ParameterizedType) type).getActualTypeArguments().length == 2) {
            //map指定泛型类型的
            NetWorkLogUtil.logE("map指定泛型类型的");
        } else {
            //其它单个对象类型
            NetWorkLogUtil.logE("其它单个对象类型");
        }
    }

}
